package com.amado.course36ByteStream.homework.dao.impl;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

import com.amado.course36ByteStream.homework.dao.GoodsCateDao;
import com.amado.course36ByteStream.homework.entity.GoodsCate;

public class GoodsDaoImpl implements GoodsCateDao {
	private static final File FILE = new File("F:\\goodsCate.txt");

	@Override
	public void add(GoodsCate record) {
		// 1、读取出来
		List<GoodsCate> list = readFile();
		// 第一次添加，文件中没有数据List==null
		if (list == null) {
			list = new ArrayList<>();
		}
		// 2、添加到List
		list.add(record);
		// 3、回写List数据到文件
		writeFile(list);
	}

	@Override
	public void delete(String goodsCateCode) {
		// 1、读取出来
		List<GoodsCate> list = readFile();
		// 第一次添加，文件中没有数据List==null
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).getCateCode().equals(goodsCateCode)) {
				// 2、删除数据
				list.remove(i);
				break;
			}
		}
		// 3、回写List数据到文件
		writeFile(list);
	}

	@Override
	public GoodsCate get(String goodsCateCode) {
		// 1、读取出来
		List<GoodsCate> list = readFile();
		// 第一次添加，文件中没有数据List==null
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).getCateCode().equals(goodsCateCode)) {
				// 2、取数据
				return list.get(i);
			}
		}
		return null;
	}

	@Override
	public void update(GoodsCate goodsCate) {
		// 1、读取出来
		List<GoodsCate> list = readFile();
		// 第一次添加，文件中没有数据List==null
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).getCateCode().equals(goodsCate.getCateCode())) {
				// 2、取数据
				list.set(i, goodsCate);
			}
		}
	}

	@Override
	public List<GoodsCate> list() {
		return readFile();
	}

	/**
	 * 将对象写入文件
	 * 
	 * @param list 对象
	 */
	private void writeFile(List<GoodsCate> list) {
		ObjectOutput output = null;
		try {
			if (!FILE.getParentFile().exists()) {
				FILE.getParentFile().mkdirs();
			}
			if (!FILE.exists()) {
				FILE.createNewFile();
			}
			output = new ObjectOutputStream(new FileOutputStream(FILE));
			output.writeObject(list);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				output.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 将文件中的对象读取出来并返回
	 * 
	 * @return 读取出来的对象
	 */
	private List<GoodsCate> readFile() {
		ObjectInputStream output = null;
		try {
			output = new ObjectInputStream(new FileInputStream(FILE));
			List<GoodsCate> list = (List<GoodsCate>) output.readObject();
			return list;
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			try {
				output.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

}
